x86_64: widen bit width usable for struct domain allocation
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 12 Feb 2010 09:24:18 +0000 (09:24 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 12 Feb 2010 09:24:18 +0000 (09:24 +0000)
With it being a PDX (instead of a PFN) that gets stored when a 32-bit
quantity is needed, we should also account for the bits removed during
PFN-to-PDX conversion when doing the allocation.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/domain.c

index 64251eedf886aa8bccafe642f2bda42a9d8fd319..0ead1a1985b139d1cc22ef2381910ea5ab6fbeeb 100644 (file)
@@ -174,11 +174,15 @@ struct domain *alloc_domain_struct(void)
 {
     struct domain *d;
     /*
-     * We pack the MFN of the domain structure into a 32-bit field within
+     * We pack the PDX of the domain structure into a 32-bit field within
      * the page_info structure. Hence the MEMF_bits() restriction.
      */
-    d = alloc_xenheap_pages(
-        get_order_from_bytes(sizeof(*d)), MEMF_bits(32 + PAGE_SHIFT));
+    unsigned int bits = 32 + PAGE_SHIFT;
+
+#ifdef __x86_64__
+    bits += pfn_pdx_hole_shift;
+#endif
+    d = alloc_xenheap_pages(get_order_from_bytes(sizeof(*d)), MEMF_bits(bits));
     if ( d != NULL )
         memset(d, 0, sizeof(*d));
     return d;